/**
**************************************************************************************
*Founder Effect                                                                      *
*Copyright (C) 2006-2007, 5d Studios (www.5d-Studios.com)                            *
*                                                                                    *
*This library is free software; you can redistribute it and/or                       *
*modify it under the terms of the GNU Lesser General Public                          *
*License as published by the Free Software Foundation; either                        *
*version 2.1 of the License, or (at your option) any later version.                  *
*                                                                                    *
*This library is distributed in the hope that it will be useful,                     *
*but WITHOUT ANY WARRANTY; without even the implied warranty of                      *
*MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU                   *
*Lesser General Public License for more details.                                     *
*                                                                                    *
*You should have received a copy of the GNU Lesser General Public                    *
*License along with this library; if not, write to the Free Software                 *
*Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA      *
**************************************************************************************
*/
#pragma once
#pragma warning( disable : 4800 )
#include <string>

/**
 * File format
 */
enum ImageType {
    TGA,
    BMP,
    PCX,
    JPEG,
    GIF
};

/**
 * Image flags 
 */
enum ImageFlag {
    IF_FLIP     = 1,
    IF_MIRROR   = 2
};

/**
 * Image 
 */
struct Image
{
    // width and height
    int width;
    int height;
    // corners
    int x;
    int y;

    // x and y coord
    float texWidth;
    float texHeight;

    // for subimages
    int rows;
    int columns;

    float subWidth;
    float subHeight;

    // texture number
    unsigned int textNum;
    // id for tracking
    unsigned int id;
    // path name
    std::string name;
    
    // image type
    ImageType imageType;

    // Image data, remember to delete
    // once loaded
    unsigned char* data;

    unsigned char bitDepth;

    int nBPP;
	/** Clear the image data */
	void Delete() {
		if ( data )
		{
			delete [] data;
			data = NULL;
		}
	}
    /** Init */
    void Init() {
        width = height = x = y = rows = columns = nBPP = iFlags = 0;
        texWidth = texHeight = subWidth = subHeight = 0;
        textNum = id = -1;
        data = 0; bitDepth = 0;
    };

    /** Is the imaged flipped */
    bool IsFlipped() { return (iFlags & IF_FLIP); };
    /** Is the image mirrored */
    bool IsMirrored() { return (iFlags & IF_MIRROR); };
    int     iFlags;

    virtual ~Image() {};
};